package fr.uniscol;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import fr.uniscol.model.Enseignant;
import fr.uniscol.model.IUniscolUser;
import fr.uniscol.mvc.SessionExpireeException;
import fr.uniscol.service.IEnseignantService;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class EnseignantController extends UniscolMainController {

	@Autowired
	private IEnseignantService enseignantService;
	
    @ModelAttribute("menuContextuel")
    public String getMenuContextuel() throws Exception{
        return  "menus/menu_enseignants";
    }
	
	@RequestMapping("/enseignants")
	public ModelAndView list(HttpSession session){ 
		
		List<Enseignant> enseignants = enseignantService.getAllEnseignantsOfEtablissement(getUtilisateur(session).getBaseSelectionnee());
		
		return new ModelAndView("enseignants", "enseignants", enseignants);
	}
	
    @RequestMapping("/enseignant.create")
    public ModelAndView create(HttpSession session){
        
        Enseignant enseignant = new Enseignant();
        
        return new ModelAndView("enseignant", "enseignant", enseignant);
    }
    
	@RequestMapping("/enseignant.edit")
	public String edit(@RequestParam("enseignantid") int enseignantId, Model model, HttpSession session){
		
		Enseignant enseignant = enseignantService.getEnseignantById(enseignantId);
		model.addAttribute("enseignant", enseignant);
		
		return "enseignant";
	}
    
    @RequestMapping(value = "/enseignant.save", method = RequestMethod.POST)
    public String saveEnseignant(@ModelAttribute("enseignant") Enseignant enseignant, BindingResult results, HttpSession session){
        
        enseignant.setBase(getUtilisateur(session).getBaseSelectionnee());
        
        if(enseignantService.saveEnseignant(enseignant)){
            alertSuccess("enseignant.save.ok", "L'enseignant a été enregistré", session);
        }else{
            alertError("enseignant.save.nok", "L'enseignant n'a pas été enregistré", session);
        }
        
        return "redirect:enseignant.edit?enseignantid=" + enseignant.getId();
    }
    
    @RequestMapping("/enseignant.delete")
    public String deleteEnseignant(@RequestParam("enseignantid") long enseignantId, HttpSession session){
        
        Enseignant enseignant = new Enseignant();
        enseignant.setId(enseignantId);
        
        if(enseignantService.deleteEnseignant(enseignant)){
            alertSuccess("enseignant.delete.ok", "L'enseignant a été supprimé", session);
        }else{
            alertError("enseignant.delete.nok", "L'enseignant n'a pas été supprimé", session);
        }
        return "redirect:enseignants";
    }
}
